#include <iostream>
using namespace std;
#include<string>

#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main()
{
    int pipefd[2] = {0};
    int n = pipe(pipefd);
    if (n == -1)
    {
        perror("pipe create fail");
        exit(1);
    }

    pid_t id = fork();
    if (id < 0)
    {
        exit(1);
    }

    if (id == 0)
    {
        // child
        close(pipefd[1]);
        char buffer[1024] = {0};
        int count = 0;
        while(true)
        {
            int n = read(pipefd[0],buffer,11);
            count++;
            if(n == 0)
                break;
            else
            {
                buffer[n] = '\0';
                cout <<"第"<< count <<"次读：" << buffer << endl;
            }
        }
        cout <<"child " << getpid() << " quit" <<endl;
        sleep(2);

        exit(0);
    }

    // father
    close(pipefd[0]);
    int num = 10;
    string message = "hello world";
    while(num--)
    {
        write(pipefd[1],message.c_str(),message.size());
        sleep(1);
    }
    close(pipefd[1]);//父进程关闭管道的写端，子进程读到0，子进程也退出

    pid_t rid = waitpid(id,nullptr,0);
    if(rid > 0)
    {
        cout << "wait child " << rid << " success" <<endl;
    }
    return 0;
}


// class Solution {
// public:
//     int searchInsert(vector<int>& nums, int target) 
//     {
//         int left = 0,right = nums.size() - 1;

//         while(left < right)
//         {
//             int mid = left + (right - left) / 2;
   
//             if(nums[mid] >= target)
//                 right = mid;
//             else
//                 left = mid + 1;
//         } 
//         if(nums[left] < target)
//             return left + 1;
//         else
//             return left;
//     }
// };

// class Solution {
// public:
//     int pivotIndex(vector<int>& nums) 
//     {
//         int right = 0,left = 0;

//         for(auto e : nums)
//             right += e;
        
//         for(int i = 0; i < nums.size(); i++)
//         {
//             if(left == (right - nums[i]))
//                 return i;
//             right -= nums[i];
//             left += nums[i];
//         }
//         return -1;
//     }
// };

// class Solution {
// public:
//     int pivotIndex(vector<int>& nums) 
//     {
//         int n = nums.size();
//         vector<int> left(n+2);
//         vector<int> right(n+2);

//         for(int i=1; i < n; i++)
//             left[i] = left[i-1] + nums[i-1];
//         for(int i=n-2; i >= 0; i--)
//             right[i] = right[i+1] + nums[i+1];
        
//         for(int i=0; i < n; i++)
//         {
//             if(left[i] == right[i])
//                 return i;
//         }
//         return -1;
//     }
// };